#include "ClaveChar.h"
#include "Caracter.h"
#include "../funciones.h"
#include "../DatoBSharp.h"

//prueba
#include <iostream>

namespace Toolkit
{

ClaveChar::ClaveChar(const char &unCaracter)
{
    this->caracter = unCaracter;
}

ClaveChar::~ClaveChar()
{
}

void ClaveChar::serializar(stringstream &stream) const
{
    stream.write(&caracter, sizeof(char));
}

void ClaveChar::hidratar(stringstream &stream)
{
    stream.read(&caracter, sizeof(char));
}

bool ClaveChar::operator ==(const Clave& otra) const
{
    return caracter == ((ClaveChar&) otra).getCaracter();

}

bool ClaveChar::operator ==(const Dato& dato) const
{
    return caracter == ((Caracter&) dato).getCaracter();
}

bool ClaveChar::operator <(const Clave &otra) const
{
    return caracter < ((ClaveChar&) otra).getCaracter();
}

bool ClaveChar::operator <(const Dato &dato) const
{
    return caracter < ((Caracter&) dato).getCaracter();
}

Clave* ClaveChar::clonar() const
{
    return new ClaveChar(caracter);
}

char ClaveChar::getCaracter() const
{
    return caracter;
}

void ClaveChar::setCaracter(const char &unCaracter)
{
    this->caracter = unCaracter;
}

unsigned long int ClaveChar::getTamanoSerializacion() const
{
    stringstream aux;
    this->serializar(aux);
    return aux.str().size();
}

Clave* ClaveChar::crearDesdeDato(const Dato& dato) const
{
    DatoBSharp* datoBSharp = (DatoBSharp*)(&dato);

    ClaveChar* claveChar = (ClaveChar*)datoBSharp->getClave();

    return new ClaveChar(claveChar->getCaracter());
}

}
